﻿using System;
using System.ComponentModel;
using System.Runtime.InteropServices;

namespace Teigha.Core
{
	public class OdGiDgLinetypeModifiers : IDisposable
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public OdGiDgLinetypeModifiers(IntPtr cPtr, bool cMemoryOwn)
		{
			this.swigCMemOwn = cMemoryOwn;
			this.swigCPtr = new HandleRef(this, cPtr);
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public static HandleRef getCPtr(OdGiDgLinetypeModifiers obj)
		{
			if (obj != null)
			{
				return obj.swigCPtr;
			}
			return new HandleRef(null, IntPtr.Zero);
		}

		~OdGiDgLinetypeModifiers()
		{
			this.Dispose();
		}

		public virtual void Dispose()
		{
			if (this.swigCPtr.Handle != IntPtr.Zero)
			{
				if (this.swigCMemOwn)
				{
					lock (this.locker)
					{
						if (this.swigCPtr.Handle != IntPtr.Zero && this.swigCMemOwn)
						{
							this.swigCMemOwn = false;
							GlobalsPINVOKE.delete_OdGiDgLinetypeModifiers(this.swigCPtr);
						}
					}
					this.swigCMemOwn = false;
				}
				this.swigCPtr = new HandleRef(null, IntPtr.Zero);
			}
			GC.SuppressFinalize(this);
		}

		public uint m_uFlags
		{
			get
			{
				uint result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_uFlags_get(this.swigCPtr);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
				return result;
			}
			set
			{
				GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_uFlags_set(this.swigCPtr, value);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
			}
		}

		public double m_dDashScale
		{
			get
			{
				double result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_dDashScale_get(this.swigCPtr);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
				return result;
			}
			set
			{
				GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_dDashScale_set(this.swigCPtr, value);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
			}
		}

		public double m_dGapScale
		{
			get
			{
				double result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_dGapScale_get(this.swigCPtr);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
				return result;
			}
			set
			{
				GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_dGapScale_set(this.swigCPtr, value);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
			}
		}

		public double m_dWidth
		{
			get
			{
				double result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_dWidth_get(this.swigCPtr);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
				return result;
			}
			set
			{
				GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_dWidth_set(this.swigCPtr, value);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
			}
		}

		public double m_dEndWidth
		{
			get
			{
				double result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_dEndWidth_get(this.swigCPtr);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
				return result;
			}
			set
			{
				GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_dEndWidth_set(this.swigCPtr, value);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
			}
		}

		public double m_dPhase
		{
			get
			{
				double result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_dPhase_get(this.swigCPtr);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
				return result;
			}
			set
			{
				GlobalsPINVOKE.OdGiDgLinetypeModifiers_m_dPhase_set(this.swigCPtr, value);
				if (GlobalsPINVOKE.SWIGPendingException.Pending)
				{
					throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
				}
			}
		}

		public OdGiDgLinetypeModifiers() : this(GlobalsPINVOKE.new_OdGiDgLinetypeModifiers(), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool getDashScaleFlag()
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getDashScaleFlag(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setDashScaleFlag(bool bSet)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setDashScaleFlag(this.swigCPtr, bSet);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public double getDashScale()
		{
			double result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getDashScale(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setDashScale(double dScale)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setDashScale(this.swigCPtr, dScale);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool getGapScaleFlag()
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getGapScaleFlag(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setGapScaleFlag(bool bSet)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setGapScaleFlag(this.swigCPtr, bSet);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public double getGapScale()
		{
			double result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getGapScale(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setGapScale(double dScale)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setGapScale(this.swigCPtr, dScale);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool getWidthFlag()
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getWidthFlag(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setWidthFlag(bool bSet)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setWidthFlag(this.swigCPtr, bSet);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public double getWidth()
		{
			double result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getWidth(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setWidth(double dWidth)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setWidth(this.swigCPtr, dWidth);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool getEndWidthFlag()
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getEndWidthFlag(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setEndWidthFlag(bool bSet)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setEndWidthFlag(this.swigCPtr, bSet);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public double getEndWidth()
		{
			double result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getEndWidth(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setEndWidth(double dEndWidth)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setEndWidth(this.swigCPtr, dEndWidth);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGiDgLinetypeModifiers.WidthMode getWidthMode()
		{
			OdGiDgLinetypeModifiers.WidthMode result = (OdGiDgLinetypeModifiers.WidthMode)GlobalsPINVOKE.OdGiDgLinetypeModifiers_getWidthMode(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setWidthMode(OdGiDgLinetypeModifiers.WidthMode mode)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setWidthMode(this.swigCPtr, (int)mode);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool getShiftFlag()
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getShiftFlag(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setShiftFlag(bool bSet)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setShiftFlag(this.swigCPtr, bSet);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool getFractionShiftFlag()
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getFractionShiftFlag(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setFractionShiftFlag(bool bSet)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setFractionShiftFlag(this.swigCPtr, bSet);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool getCenteredShiftFlag()
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getCenteredShiftFlag(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setCenteredShiftFlag(bool bSet)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setCenteredShiftFlag(this.swigCPtr, bSet);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public double getPhase()
		{
			double result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getPhase(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setPhase(double dPhase)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setPhase(this.swigCPtr, dPhase);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGiDgLinetypeModifiers.ShiftMode getShiftMode()
		{
			OdGiDgLinetypeModifiers.ShiftMode result = (OdGiDgLinetypeModifiers.ShiftMode)GlobalsPINVOKE.OdGiDgLinetypeModifiers_getShiftMode(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setShiftMode(OdGiDgLinetypeModifiers.ShiftMode mode)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setShiftMode(this.swigCPtr, (int)mode);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool getTrueWidthFlag()
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getTrueWidthFlag(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setTrueWidthFlag(bool bSet)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setTrueWidthFlag(this.swigCPtr, bSet);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool getBreakAtCornersFlag()
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getBreakAtCornersFlag(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setBreakAtCornersFlag(bool bSet)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setBreakAtCornersFlag(this.swigCPtr, bSet);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool getRunThroughCornersFlag()
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_getRunThroughCornersFlag(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setRunThroughCornersFlag(bool bSet)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setRunThroughCornersFlag(this.swigCPtr, bSet);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGiDgLinetypeModifiers.CornersMode getCornersMode()
		{
			OdGiDgLinetypeModifiers.CornersMode result = (OdGiDgLinetypeModifiers.CornersMode)GlobalsPINVOKE.OdGiDgLinetypeModifiers_getCornersMode(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void setCornersMode(OdGiDgLinetypeModifiers.CornersMode mode)
		{
			GlobalsPINVOKE.OdGiDgLinetypeModifiers_setCornersMode(this.swigCPtr, (int)mode);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool IsEqual(OdGiDgLinetypeModifiers lsMod)
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_IsEqual(this.swigCPtr, OdGiDgLinetypeModifiers.getCPtr(lsMod));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool IsNotEqual(OdGiDgLinetypeModifiers lsMod)
		{
			bool result = GlobalsPINVOKE.OdGiDgLinetypeModifiers_IsNotEqual(this.swigCPtr, OdGiDgLinetypeModifiers.getCPtr(lsMod));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		private object locker = new object();

		private HandleRef swigCPtr;

		protected bool swigCMemOwn;

		public enum Flags
		{
			kFlagUseDashScale = 1,
			kFlagUseGapScale,
			kFlagUseWidth = 4,
			kFlagUseEndWidth = 8,
			kFlagUseShift = 16,
			kFlagUseFractionShift = 32,
			kFlagUseCenteredShift = 64,
			kFlagTrueWidth = 128,
			kFlagOverrideBreakAtCorners = 256,
			kFlagOverrideRunThroughCorners = 512,
			kFlagsWidthMask = 12,
			kFlagsShiftMask = 112,
			kFlagsCornersMask = 768
		}

		public enum WidthMode
		{
			kLsNoWidth,
			kLsWidthConstant,
			kLsWidthTapered
		}

		public enum ShiftMode
		{
			kLsNoShift,
			kLsShiftDistance,
			kLsShiftFraction,
			kLsShiftCentered
		}

		public enum CornersMode
		{
			kLsCornersFromLS,
			kLsBreakAtCorners,
			kLsRunThroughCorners
		}
	}
}
